package com.guit.hrms.service;

import com.guit.hrms.dto.LocationCheckInDTO;
import com.guit.hrms.dto.SetCheckInTimeDTO;
import com.guit.hrms.dto.TransactionDTO;
import com.guit.hrms.po.AttendanceStatistics;
import com.guit.hrms.po.EmpSign;
import com.guit.hrms.po.utilsPO.PageBean;
import com.guit.hrms.po.Transaction;
import com.guit.hrms.vo.EmpSignVO;


import java.time.LocalDate;
import java.util.List;

public interface AttendanceService {
    /**
     * 设置打卡时间
     */
    Integer setCheckInTime(SetCheckInTimeDTO setCheckInTimeDTO);

    /**
     * 获取对应部门的打卡时间要求
     */
    SetCheckInTimeDTO getCheckInTime(Integer deptId, Integer deptType);

    /**
     * 定位打卡
     */
    Integer locationCheckIn(LocationCheckInDTO locationCheckInDTO);

    /**
     * 获取所有考勤信息
     */
    PageBean getRecords(Integer page, Integer pageSize, LocalDate checkInDate, Integer isCheckIn, Integer checkInStatus, Integer circumstance);

    /**
     * 获取单个员工考勤记录
     */
    List<EmpSign> getRecordsById(String employeeId);

    /**
     * 事务申请
     * @param transaction
     */
    Integer affairs(Transaction transaction);

    /**
     * 个人查询事务
     * @return
     */
    PageBean getTransaction(Integer page , Integer pageSize, Integer type, Integer approvalStatus, Integer revokeStatus, Integer extensionStatus);

    /**
     * 删除事务记录
     */
    void deleteLeaveRecord(List<Integer> ids);

    /**
     * 销假
     */
    Integer cancelTransaction(Integer id);

    /**
     * 更新事务
     */
    Integer updateTransaction(Transaction transaction);

    /**
     * 修改请假原因
     */
    Integer updateTransactionReason(TransactionDTO transactionDTO, String employeeId);

    /**
     * 获取各部门的打卡设置信息
     */
    PageBean getAllCheckInTime(Integer page, Integer pageSize, Integer deptId, Integer deptType);

    /**
     * 按月统计打卡情况
     */
    void countAttendanceByMonth(LocalDate lastYearMonth);

    /**
     * 获取所有考勤统计信息
     */
    PageBean getAllAttendanceStatistics(Integer page, Integer pageSize, String employeeId, String yearMonth, Integer deptId, Integer academyId, Integer otherDeptId);

    /**
     * 获取员工个人当天考勤记录
     */
    EmpSignVO getPersonalRecords(String employeeId);

    /**
     * 增加员工打卡记录
     * @param checkInDate 打卡日期
     */
    void addEmpSign(LocalDate checkInDate);
}
